package com.guomei.service.curse;

import com.guomei.bean.curse.CourseCategoryRelation;
import com.guomei.bean.curse.CreateOrUpdateCourseCategoryRelationDTO;
import com.guomei.utils.Result;

import java.util.List;

/**
 * 课程与类别关联表服务接口
 */
public interface CourseCategoryRelationService {
    /**
     * 新增课程类别关联
     * @param relation 课程类别关联实体
     * @return 影响行数
     */
    int addRelation(CourseCategoryRelation relation);

    /**
     * 根据ID删除课程类别关联
     * @param id 关联ID
     * @return 影响行数
     */
    int deleteRelationById(Long id);

    /**
     * 根据课程ID删除关联
     * @param courseId 课程ID
     * @return 影响行数
     */
    int deleteRelationsByCourseId(Long courseId);

    /**
     * 根据类别ID删除关联
     * @param categoryId 类别ID
     * @return 影响行数
     */
    int deleteRelationsByCategoryId(Long categoryId);

    /**
     * 根据课程ID和类别ID删除关联
     * @param courseId 课程ID
     * @param categoryId 类别ID
     * @return 影响行数
     */
    int deleteRelationByCourseIdAndCategoryId(Long courseId, Long categoryId);

    /**
     * 根据ID查询课程类别关联
     * @param id 关联ID
     * @return 课程类别关联实体
     */
    CourseCategoryRelation getRelationById(Long id);

    /**
     * 根据课程ID查询关联的类别ID列表
     * @param courseId 课程ID
     * @return 类别ID列表
     */
    List<Long> getCategoryIdsByCourseId(Long courseId);

    /**
     * 根据类别ID查询关联的课程ID列表
     * @param categoryId 类别ID
     * @return 课程ID列表
     */
    List<Long> getCourseIdsByCategoryId(Long categoryId);

    /**
     * 批量添加课程类别关联
     * @param relations 课程类别关联列表
     * @return 影响行数
     */
    int batchAddRelations(List<CourseCategoryRelation> relations);

    /**
     * 更新课程的关联类别
     * @return 影响行数
     */
    int updateCourseRelations(CreateOrUpdateCourseCategoryRelationDTO createOrUpdateCourseCategoryRelationDTO);

    Result<?> selectByCondition(CourseCategoryRelation courseCategory);
}
